package persistencia;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import negocio.Area;
import negocio.Curso;
import negocio.Instructor;
import negocio.Supervisor;

public class InstructorDAO 
{
	private static InstructorDAO instancia;
	private final Connection c;
	
	
	
	private InstructorDAO()
	{
		c = BDManager.getInstance().getConexion();
	}

	public static InstructorDAO getInstance()
	{
		if(instancia ==null)
		{
			instancia = new InstructorDAO();
		}
		return instancia;
	}
	
	
	//TODO: para proximos sprints se usa
	public void guardar(Instructor usu)
	{
		String query = "INSERT INTO instructor( dni, nombre, apellido, telefono, mail, nickname, contrasenia) VALUES"+ " ('" + usu.getDni() + "','" + usu.getNombre() +"','" + usu.getApellido() + "','" + usu.getTelefono() +"','"+ usu.getMail()+ "','" + usu.getNickname() + "','" + usu.getContrasenia() +"')";
		
		try {
			Statement s = c.createStatement();
			s.execute(query);
			s.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	
	
	
	
	public Instructor getInstructor(String dni)
	{
		String query = "SELECT * FROM instructor WHERE dni='"+dni+"'";
		Statement s;
		ResultSet rs;
		Instructor res = null;
		try{
			s = c.createStatement();
			rs = s.executeQuery(query);
			rs.next();
			//Se hereda el constructor de la Clase Usuario (capa negocio)
			res = new Instructor(rs.getString("dni"), rs.getString("nombre"), rs.getString("apellido"), rs.getInt("telefono"), rs.getString("mail"),rs.getString("nickname"), rs.getString("contrasenia"));
			s.close();
		}
		catch(SQLException e)
		{
			e.printStackTrace();
		}
		return res;
	}
	
	public ArrayList<Instructor> getAll()
	{
		String query = "SELECT * FROM instructor";
		Statement s;
		ResultSet rs;
		ArrayList<Instructor> res = new ArrayList<Instructor>();
		try {
			s = c.createStatement();
			rs = s.executeQuery(query);
			while(rs.next())
			{
				res.add(new Instructor(rs.getString("dni"), rs.getString("nombre"), rs.getString("apellido"), rs.getInt("telefono"), rs.getString("mail"),rs.getString("nickname"), rs.getString("contrasenia")));
			}
			s.close();
		} catch (SQLException e) 
		{
			e.printStackTrace();
		}
		return res;
	}

	
	
	
	  //SE devuelve Objeto, para luego comparar si permanece null la variable o no cuando se invoca este metodo.
	  public Instructor buscarUser(String username, String password) throws SQLException {
	    String query = String.format(
	      "select * from instructor where nickname = '%s' and contrasenia = '%s';",
	      username, password
	    );
	    Statement s = c.createStatement();
	    ResultSet rs = s.executeQuery(query);
	   
	    Instructor dto = null;
	    
	    if (rs.next()) {
	    	
	      dto = new Instructor(rs.getString("dni"), rs.getString("nombre"), rs.getString("apellido"), rs.getInt("telefono"), rs.getString("mail"),rs.getString("nickname"), rs.getString("contrasenia")  );
	    }
	    s.close();
	    return dto; //si no existe devuelve null
	  }
	
	
}
